<?php
/**
 *文件： Upload.php
 *作用： 图片上传
 *作者： 聂明星
 *说明：
 *修改时间：2013-05-31
 *
 */

class Upload
{

	public	    $uploaddir='./upload/';
    public      $filename='';
    public      $sync_upyun=FALSE;
	public		$type;
	public		$size;
    public      $maxsize=5242880;//5M
    public      $allowtype=array('jpg','jpeg','gif','png','bmp','gz','tgz','z2','zip','rar','7z','doc','docx','ppt','pptx','xls','xlsx','txt','pdf');	# 所有允许上传的文件类型
	private     $imgtype=array('jpg','jpeg','gif','png','bmp');
    public function __construct(){}

    /**
     * 设置上传目录
     */
    function set_upload_dir($dir)
    {
        $this->uploaddir=$dir;
    }
    /**
     * 设置最大限制
     */
    function set_max_size($size)
    {
        $this->maxsize=$size;
    }
    /**
     * 设置允许上传类型
     */
    function set_allow_type($allowtype)
    {
        $this->allowtype=$allowtype;
    }
    /**
     * 设置为仅上传图片
     */
    function set_only_upload_image()
    {
        $this->allowtype=$this->imgtype;
    }
    /**
     * 设置文件名
     */
    function set_file_name($filename)
    {
        $this->filename=$filename;
    }
    /**
     * 设置是否同步到又拍云
     */
    function set_sync_upyun($sync=TRUE)
    {
        $this->sync_upyun=$sync;
    }
    /**
     * 上传初始化
     */
    function init($options)
    {
        foreach($options as $k=>$v)
        {
            $this->$k=$v;
        }
    }
	/**
	*说明： 上传方法
	*参数： $file 数组 上传的文件 $upload 文件上传路径 $maxsize 最大上传文件
	*返回： 文件名
	*/
	function execute($file, $maxsize = 0, $upload = '')
	{
		//上传设置
		$upload	= $upload? $upload: $this->uploaddir;

        $this->maxsize=$maxsize?$maxsize:$this->maxsize;

		//判断文件大小
		if($file['name']=='')
		{
			return -1;
		}
		//判断文件大小
		$this->size	= $file['size'];
		if($this->size>$this->maxsize)
		{
			return -2;
		}
        //获取文件类型
		$this->type	= get_file_suffix($file['name']);
		if(!in_array($this->type, $this->allowtype))
		{
			return -3;
		}

		//文件目录和文件名
		$dir	= date("Y-m-d",time())."/";
		if(!is_dir($upload.$dir))
		{
			@mkdir($upload.$dir,0777);
		}
		$time	= time();
		$flag	= substr(md5($file['name']), 0, 4);
        $this->filename=$this->filename?$this->filename:$time.$flag;
		$filename	= $dir.$this->filename.'.'.$this->type;		//正常大小图片名
		$destination= $upload.$filename;
//echo $file['tmp_name'];
//        echo $destination;
		//上传
		if(!@move_uploaded_file($file['tmp_name'], $destination)) return false;


		return $filename;
	}
    /**
     * 删除文件
     * @author  nmx
     * @param   string  $file   文件路径
     * @return  boolean
     */
	function del_file($file)
	{
	   $path=$this->uploaddir.$file;
	   if (is_file($path))
       {
           $this->sync_upyun && $this->del_upyun_file($file);
           return unlink($path);
	   }
       return FALSE;
	}

	/**
	 * 删除文件
	 * @author bai
	 * @param string $file 文件路径
	 */
	public function del_file_new($file) {
		$this->del_upyun_file($file);

		$path = $this->uploaddir.$file;

		if (is_file($path)) {
			unlink($path);
		}
	}

    //获取文件名及文件扩展
    public function fileinfo($file_name){
	  $retval = "";
	  $pt = strrpos ( $file_name ,  "." );
	  $fn = substr ($file_name,0,$pt);
	  if  ( $pt )  $retval = substr ( $file_name ,  $pt,  strlen ( $file_name ) -  $pt );
	  return array("fname"=>$fn,"ftype"=>$retval);
    }
}
